/*
 *  $Id: PhraseBuilder.cs 1178 2010-11-09 18:14:43Z thenn.erannor $
 *	This file is a part of Ragima CCG.
 *	(C) 2008-2010 Ragima development group.
 *
 *	Licensed under the terms of the GNU GPL License version 2.
 *
 */

using System.Collections.Generic;
using System.Text;

namespace Ragima.Languages {
    /// <summary>
    /// Построитель фраз, передаваемый в части фраз, и содержащий дополнительную информацию для них.
    /// </summary>
    public class PhraseBuilder {
        private Language _lang;
        private StringBuilder _builder;

        public PhraseBuilder(Language lang) {
            _lang = lang;
            _builder = new StringBuilder();
        }

        /// <summary>
        /// Язык, на котором строится фраза.
        /// </summary>
        public Language Language {
            get { return _lang; }
        }

        /// <summary>
        /// Экземпляр StringBuilder, используемый для построения фразы.
        /// </summary>
        public StringBuilder Text {
            get { return _builder; }
        }

        /// <summary>
        /// Очищает буфер построителя.
        /// </summary>
        public void Clear() {
            _builder.Length = 0;
        }

        /// <summary>
        /// Добавляет в буфер указанный текст.
        /// </summary>
        public void Append(string text) {
            _builder.Append(text);
        }

        /// <summary>
        /// Добавляет в буфер указанный текст (с капитализацией, если это нужно).
        /// </summary>
        public void AppendCapitalize(string text, bool capitalize) {
            if (string.IsNullOrEmpty(text))
                return;
            if (capitalize)
                _builder.Append(char.ToUpper(text[0])).Append(text, 1, text.Length-1);
            else
                _builder.Append(text);
        }

        /// <summary>
        /// Получает построенную фразу в виде пары текст/объект подсказки и очищает буфер.
        /// </summary>
        public HintedPhraseText GetHintedText(object hint) {
            var text = _builder.ToString();
            Clear();
            return new HintedPhraseText(text, hint);
        }

        /// <summary>
        /// Получает постронную фразу в виде строки.
        /// </summary>
        public override string ToString() {
            return _builder.ToString();
        }
    }
}
